{
case XEN_DOMCTL_SENDTRIGGER_NMI:
{
- ret = -ENOSYS;
- if ( !is_hvm_domain(d) )
- break;
-
ret = 0;
- if ( !test_and_set_bool(v->arch.hvm_vcpu.nmi_pending) )
+ if ( !test_and_set_bool(v->nmi_pending) )
vcpu_kick(v);
}
break;
{
struct hvm_domain *plat = &v->domain->arch.hvm_domain;
- if ( unlikely(v->arch.hvm_vcpu.nmi_pending) )
+ if ( unlikely(v->nmi_pending) )
return hvm_intack_nmi;
if ( vlapic_has_interrupt(v) != -1 )
switch ( type )
{
case hvm_intack_nmi:
- return test_and_clear_bool(v->arch.hvm_vcpu.nmi_pending);
+ return test_and_clear_bool(v->nmi_pending);
case hvm_intack_lapic:
return ((*vector = cpu_get_apic_interrupt(v)) != -1);
case hvm_intack_pic:
continue;
deliver_bitmask &= ~(1 << bit);
if ( ((v = vioapic_domain(vioapic)->vcpu[bit]) != NULL) &&
- !test_and_set_bool(v->arch.hvm_vcpu.nmi_pending) )
+ !test_and_set_bool(v->nmi_pending) )
vcpu_kick(v);
}
break;
break;
case APIC_DM_NMI:
- if ( !test_and_set_bool(v->arch.hvm_vcpu.nmi_pending) )
+ if ( !test_and_set_bool(v->nmi_pending) )
vcpu_kick(v);
break;
set_bit(reason_idx, nmi_reason(d));
- if ( !xchg(&v->nmi_pending, 1) )
+ if ( !test_and_set_bool(v->nmi_pending) )
raise_softirq(NMI_SOFTIRQ); /* not safe to wake up a vcpu here */
}
s64 cache_tsc_offset;
u64 guest_time;
- /* Is an NMI pending for delivery to this VCPU core? */
- bool_t nmi_pending; /* NB. integrate flag with save/restore */
-
/* Lock and list for virtual platform timers. */
spinlock_t tm_lock;
struct list_head tm_list;